package com.tedu.api;

import org.junit.Test;
import org.omg.CORBA.PUBLIC_MEMBER;

import javax.security.auth.callback.LanguageCallback;

/**
 * java面向对象---不是真的面向对象---八大基本数据类型
 * 创建对象--类【属性、构造器、方法】
 * 8个包装类：针对八大数据类型提供对应类【方法基本上互通】
 * 包装类包位置：java.lang
 * 八大基本数据类型    针对八大数据类型的包装类
 * int                    Integer   继承Number父类【抽象】
 * lang                   Lang      继承Number父类【抽象】
 * double                 Double    继承Number父类【抽象】
 * short                  Short     继承Number父类【抽象】
 * float                  Float     继承Number父类【抽象】
 * byte                   Byte      继承Number父类【抽象】
 * char                   Character      继承Object父类【抽象】
 * boolean                Boolean   继承Object父类【抽象】
 */
public class packingAPI {
    @Test
    public void test(){
        int a=1; //不是面向对象，通过【反射】
        //创建int类型对象，Integer构造器  引入|直接写
        Integer i=new Integer(a);
        i.toString();

    }
/**
 * 创建API
 * xxxValue方法==   返回值：对应数据类型
 * 作用：把包装类转换为基本数据类型的方法
 * 测试：6个包装类
 */
@Test
    public void testxxxValue(){
    Integer i=new Integer(2);//打包：对应类行放入包装类
    i.intValue(); // int类型和Integer
    System.out.println(i);
    //测试：其他七个包装类
    //String s1="123.123";    Double
    //String s2="1";          Byte
    //String s3="123.123F";   Float
    //String s4="1234L";      Long
    //String s5="ture";       Boolean
    //String s6="a";          Character

    String s1="123.123";
    Double d=new Double(123.123);
    d=d.doubleValue();
    System.out.println(d);

    String s2="1";
    Byte b=new Byte(s2);
    b=b.byteValue();
    System.out.println(b);

    String s3="123.123F";
    Float f=new Float(123.123F);
    f=f.floatValue();
    System.out.println(f);

    String s4="1234L";
    Long l=new Long(1234L);
    l=l.longValue();
    System.out.println(l);

    String s5="ture";
    Boolean b1=new Boolean(s5);
    b1=b1.booleanValue();
    System.out.println(b1);

    char s6='a';
    Character c=new Character(s6);
    c=c.charValue();
    System.out.println(c);


  }
    /**
     * 包装类具备静态方法
     * ValueOf（）  返回值：对应数据类型
     * 作用：把包装类转换为基本数据类型的方法
     */
    @Test
    public void testValueof(){
        int i=Integer.valueOf(1); // 打包拆包一体化
        boolean b=Boolean.valueOf(true);
        char c=Character.valueOf('1');
        Float.valueOf(1.123F); // 1.123默认 double 编译工具
    }

    /**
     * 包装类-----Servlet[javaBean]
     * public class person{
     *     Integer id;  //成员---解析
     * }
     * parseXXX（）  静态方法  返回值：对应类型
     * 作用：获取到的字符串转换为对应类型
     */
    @Test
    public void testparseXXX(){
        String s="123";   //将字符串转换为整型
        int i=Integer.parseInt(s);//区别：解析字符串，转换为正确类型
        int is=Integer.valueOf(s);//区别：存入值，打包拆包获取值
        System.out.println(i);
        //将整型转换为字符串
        String s1=String.valueOf(123); //与包装类，用法一致，实现不一致
        //自己测 String s2="456";  char s3='a';
        String s2="456";
        float f=Float.parseFloat(s2);
        System.out.println(f);
        char s3='a';
        //Character 没有对应字符解析

    }

    /**
     * 自动拆装箱
     * JDK1.5之前没有自动拆装箱
     * JDK1.5之后自动拆装箱    2004
     */

    @Test
    public void test2(){
        //JDK1.5之前没有自动拆装箱
        Integer in=Integer.valueOf(1);//装箱
        //拆箱
        int ii=in.intValue();
        //JDK1.5之后自动拆装箱
        Integer i=1;
        int is=1;
        //编译器帮我们写了拆装箱过程---JVM虚拟机默认1.5之前写法
    }
}
